#!/usr/bin/env python

import os
import platform
import subprocess
import sys

from lib.util import get_vs_env


SOURCE_ROOT = os.path.abspath(os.path.dirname(os.path.dirname(__file__)))
# We're in JENKINS_ROOT/workspace/libchromiumcontent. Walk up to JENKINS_ROOT.
JENKINS_ROOT = os.path.dirname(os.path.dirname(SOURCE_ROOT))
S3_CREDENTIALS_FILE = os.path.join(JENKINS_ROOT, 'config', 's3credentials')


def main():
  if not os.path.isfile(S3_CREDENTIALS_FILE):
    return 'Error: Can\'t find {0}'.format(S3_CREDENTIALS_FILE)
  copy_to_environment(S3_CREDENTIALS_FILE)

  if 'TARGET_ARCH' in os.environ:
    return run_ci(['-t', os.environ['TARGET_ARCH']])

  if sys.platform in ['win32', 'cygwin']:
    return (run_ci(['-t', 'x64']) or
            run_ci(['-t', 'ia32']))
  elif sys.platform == 'linux2':
    return (run_ci(['-t', 'x64']) or
            run_ci(['-t', 'ia32']) or
            run_ci(['-t', 'arm']) or
            run_ci(['-t', 'arm64']))
  else:
    return run_ci([])


def copy_to_environment(credentials_file):
    with open(credentials_file, 'r') as f:
        for line in f:
            key, value = line.strip().split('=')
            key = key.replace('JANKY_ARTIFACTS_', 'LIBCHROMIUMCONTENT_')
            value = value.strip("'")
            os.environ[key] = value


def os_version():
  if sys.platform in ['win32', 'cygwin']:
    return platform.system() + ' ' + platform.release() + ' ' + platform.version()
  elif sys.platform == 'darwin':
    mac_ver = platform.mac_ver()
    return 'Mac OS X ' + mac_ver[0] + ' ' + mac_ver[2]
  else:
    return platform.platform()


def run_ci(args):
  if sys.platform in ['win32', 'cygwin']:
    target_arch = args[1]
    # Set build env for VS.
    if target_arch == 'x64':
      vs_env = get_vs_env('14.0', 'x86_amd64')
    elif target_arch == 'ia32':
      vs_env = get_vs_env('14.0', 'amd64_x86')
    os.environ.update(vs_env)

  return (run_script('bootstrap') or
          run_script('update', ['--clean'] + args) or
          run_script('build', args) or
          run_script('create-dist', args) or
          run_script('upload', args))


def run_script(script, args=[]):
  script = os.path.join('script', script)
  sys.stderr.write('+ {0}\n'.format(script))
  sys.stderr.flush()
  return subprocess.call([sys.executable, script] + args)


if __name__ == '__main__':
    sys.exit(main())
